package educar.controllers;


import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import educar.gui.IView;
import educar.gui.student.VerSolucion;
import educar.idioma.Locale;

import educar.listeners.FileUtils;
import educar.models.Actividad;
import educar.models.Materia;
import educar.models.Solucion;
import educar.models.Student;
import educar.models.Tiene;


/**
 * Permite crear una actividad
 */
public class AddSolucionController implements IController {
	private VerSolucion view;
	

	public void process(String model){
		if(null!=view) {
			/*obtengo los datos y compruebo validez*/
			Actividad actividad = view.getActividad();
			File archivo = view.getArchivo();
			Materia materia = view.getMateria();
			Student alumno = view.getAlumno();
			/*obtengo fecha de hoy*/
			Date fechaActual = new Date();
			SimpleDateFormat formato = new SimpleDateFormat("yyyy-MM-dd");
		    String hoy = formato.format(fechaActual);
		    /*obtengo la hora actual*/
		    Calendar calendario = Calendar.getInstance();
		    String hora = String.valueOf(calendario.get(Calendar.HOUR_OF_DAY));
		    String minutos = String.valueOf(calendario.get(Calendar.MINUTE));
		    String segundos = String.valueOf(calendario.get(Calendar.SECOND));
		    String tiempo = hora+":"+minutos+":"+segundos;
		    /*compruebo campos*/
			if(archivo==null) {
				view.presentWarning(Locale.EMPTY_FIELDS, Locale.ERROR);
			}
			else {
				/*si los datos son validos obtengo el file_path y creo la actividad*/
				Solucion newSolucion = new Solucion("", hoy, tiempo, null , null, archivo.getName());
				boolean result = newSolucion.save();
				if (!result) {
					return;
				}
				Tiene newTiene = new Tiene(alumno, actividad, newSolucion.getCod_solucion());
				boolean result2 = newTiene.save();
				if (!result2) {
					return;
				}
				try {
					guardarArchivo(archivo,materia,actividad,newSolucion);
				} catch (IOException e) {
					/*si no se pudo guardar el archivo borro la actividad*/
					view.presentWarning(Locale.SAVE_FILE_ERROR, Locale.ERROR);
					newSolucion.destroy();
					newTiene.destroy();					
				}
				view.present(Locale.ACTIVITY+" "+Locale.SAVED);
				view.close();
				}				
			} 
		}	
	
	
	
	/**
	 * Permite guardar el archivo cargado
	 * @param archivo File a guardar
	 * @param materia Materia que lo guarda
	 * @param codigoActividad Actividad que lo contiene
	 * @throws IOException Si no se pudo guardar
	 */
	private void guardarArchivo(File archivo,Materia materia,Actividad actividad,Solucion solucion) throws IOException {
		/*obtengo la ruta desde donde se ejecuta el progrmaa y agrego /activity_files */
		String appPath = System.getProperties().getProperty("user.dir")+File.separator+"solution_files";
		/*agrego el codigo de la materia*/
		String materiaPath = appPath+File.separator+materia.getCodigo();
		/*valido el directorio o creo la carpeta segun corresponda*/
		FileUtils.validateDir(materiaPath,true);
		/*armo la ruta completa del archivo a crear*/		
		String archivoPath = materiaPath+File.separator+actividad.getCod_actividad()+"."+solucion.getCod_solucion()+"."+archivo.getName();
		/*creo el nuevo archivo*/
		File destino = new File(archivoPath);
		/*copio el archivo subido al nuevo archivo*/
		FileUtils.copy(archivo, destino);
	}
	
	
	public void setView(IView view) {
		this.view = (VerSolucion) view;		
	}	
}